## [Команда cp в Linux](https://pingvinus.ru/note/cmd-cp)
Описание команды cp
cp
Копирует файлы и директории из одного места в другое.
Синтаксис
cp что_копируем куда_копируем
что_копируем — файл, несколько файлов, директория или несколько директорий, которые необходимо скопировать.

куда_копируем — название файла, в который выполняется копирование другого файла, или директория, в которую копируются исходные файлы или директории.

Опции
-a или --archive
То же, что и -dR --preserve=all
--attributes-only
Не копировать содержимое файла. Скопировать только атрибуты файла.
--backup=МЕТОД
Если файл назначения существует, то создать для каждого такого файла резервную копию.
МЕТОД определяет, каким образом формируется имя резервной копии. МЕТОД может принимать значения:

none или off — не делать резервных копий, даже если включена опция --backup
numbered или t — имя резервной копии получит числовой индекс (пример: myfile.txt~2~).
existing или nil — если в директории уже есть резервные копии с числовыми индексами, то использовать числовые индексы для новых резервных копий, во всех остальных случаях использовать метод simple.
simple или never — делать обычные резервные копии (пример: myfile.txt~).
-b
То же, что и --backup, но без аргументов.
--copy-contents
Скопировать содержимое специальных файлов (файлов устройств и FIFO) при рекурсивном копировании. Данную опцию использовать не рекомендуется.
-d
То же, что и --no-dereference --preserve=links
-f или --force
Если файл назначения существует и не может быть открыт, то удалить его и попытаться снова (данная опция игнорируется, если используется опция -n).
-i или --interactive
Вывести запрос на подтверждение перезаписи существующего файла.
-H
Переходить по символическим ссылкам, указанным в качестве источника.
-n или --no-clobber
Не перезаписывать существующие файлы.
-P или --no-dereference
Никогда не разыменовывать символические ссылки. Ссылки копируются, как символические ссылки.
-p
То же, что и --preserve=mode,ownership,timetamps
--preserve=СписокАтрибутов
Сохранять у файлов атрибуты, указанные через запятую в списке СписокАтрибутов
Если возможно, то можно использовать дополнительные атрибуты: context, links, xattr, all
--no-preserve=СписокАтрибутов
Не сохранять атрибутиы, указанные в списке СписокАтрибутов
--parents
Формировать результирующее имя (результирующий путь) каждого копируемого файла с учетом полного пути, который указан для данного файла.
Например, при использовании команды cp --parents a/b/myfile dstdir, файл myfile будет скопирован в директорию dstdir/a/b. То есть будут созданы промежуточные директории.

-R или -r или --recursive
Копировать директории. Используется рекурсивное копирование — копируются директории и все их содержимое.
--reflink=КОГДА
Создавать или не создавать «легкую» клонированную копию файла, если данная функциональность поддерживается файловой системой.
КОГДА может принимать значения:
always — всегда создавать «легкую» копию файла. Создается ссылка на исходные данные. Фактического копирования данных не происходит. Блоки данных копируются только тогда, когда они изменяются.
auto — создается обычная полная копия.

--remove-destination
Удалить каждый существующий файл.
--sparse=КОГДА
Опция задает то, как будет выполняться копирование разреженных (sparse) файлов. Разреженный файл — это файл, в котором последовательности нулевых байтов (дыры) заменены на информацию об этих последовательностях. То есть в метаданных файла содержится список дыр.
КОГДА может принимать значения:
auto — (поведение по умолчанию) копировать разреженные файлы в разреженные файлы.
always — результирующий файл всегда разреженный, если в исходном есть достаточное количество нулевых последовательностей.
never — не делать результирующие файлы разреженными.

--strip-trailing-slashes
Удалить у каждого исходного файла символ слеш / на конце.
-s или --symbolic-link
Создать символические ссылки вместо копирования.
-s СУФФИКС или --suffix=СУФФИКС
Изменить символ суффикса, который добавляется к именам резервных копий (при использовании опции --backup). По умолчанию СУФФИКС равен значку тильды ~
-t ДИРЕКТОРИЯ или --target-directory=ДИРЕКТОРИЯ
Скопировать все исходные файлы в ДИРЕКТОРИЮ
-T или --no-target-directory
Считать, что файл назначения это обычный файл.
-u или --update
Перемещать только если исходный файл новее, чем файл назначения или если файл-назначения отсутствует.
-v или --verbose
Выводить информацию о каждом файле, который обрабатывает команда cp.
-x или --one-file-system
Пропускать директории, расположенные на других файловых системах.
-Z
Установить контекст SELinux для результирующего файла в значение по умолчанию.
--context=CTX
Установить контекст SELinux или SMACK в значение CTX.
--help
Показать справку по команде cp.
--version
Показать версию утилиты cp.
Примеры использования команды cp
Скопировать файл в другую директорию
Скопируем файл myfile.txt в директорию mydir:

    cp myfile.txt mydir


Скопируем файл myfile1.txt в новый файл myfile2.txt

    cp myfile1.txt myfile2.txt
Скопировать несколько файлов
Для копирования нескольких файлов нужно перечислить их через пробел. Послений параметр определяет результирующую директорию, в которую будут скопированы файлы.

    cp /etc/config/myfile1.txt /home/pupkin/myfile1.txt /mnt/some/myfile3.txt mydir
Скопировать файл с подтверждением
Выведем запрос на подтверждение перезаписи результирующего файла, если он существует:

    cp -i myfile1.txt myfile2.txt
cp: переписать 'myfile2.txt'? y
Показать информацию о копируемых файлах
При использовании опции -v выводится информация о том, какие файлы и куда копируются.

    cp -v myfile1.txt myfile2.txt mydir/
'myfile1.txt' -> 'mydir/myfile1.txt'
'myfile2.txt' -> 'mydir/myfile2.txt'
Скопировать директорию
Чтобы скопировать директорию и все ее содержимое нужно использовать опцию -r

    cp -r /home/pupkin/mydir /mnt/usbflash
Скопировать только если файлы новее
Скопируем файлы вида myfile*.txt (например, это могут быть файлы myfile1.txt myfile10.txt myfile2.txt) в директорию mydir, но если результирующий файл существует, то копирование выполняется только в том случае, если исходный файл новее.

    cp -u myfile*.txt mydir
Не перезаписывать существующие файлы
Чтобы существующие файлы не перезаписывались, используется опция -n

cp -n /home/pupkin/mydir /mnt/usbflash
Скопировать только атрибуты
Скопируем только атрибуты файла. Содержимое файла не копируется.

cp --attributes-only myfile1.txt myfile2.txt
Создать резервную копию для результирующих файлов, если они существуют
Скопируем файл myfile1.txt в файл myfile2.txt. Если файл myfile2.txt существует, то будет создана его резервная копия.

cp -b myfile1.txt myfile2.txt
Команда cp backup

Принудительно перезаписывать существующие файлы назначения
Если файл назначения существует и не может быть открыт и удален, то можно использовать опцию -f, чтобы принудительно перезаписать такой файл:

cp -f myfile1.txt myfile2.txt
